❤️Android Google 登录接入❤️ 您所在的位置:网站首页 gogole apk ❤️Android Google 登录接入❤️

❤️Android Google 登录接入❤️

2023-03-20 07:25| 来源: 网络整理| 查看: 265

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

接入首先咱们看官方文档一键登录的内容。默认你已经能去Google API那边玩了。

🔥 文档图解 💥 设置你的 Google API 控制台项目 🌀 1、创建项目

在 API 控制台中打开您的项目,如果您还没有项目,请创建一个。

没有项目,咱们就创建一个。

修改项目ID:项目 ID 可以包含小写字母、数字或连字符,必须以小写字母开头并以字母或数字结尾。

项目创建好了,咱继续往下走。

🌀 2、完善 OAuth 同意屏幕信息

在 OAuth 同意屏幕页面上,确保所有信息都完整准确。特别是,请确保您已指定应用程序的隐私政策和服务条款的 URL。

你就顺着提示往下走。如下:

🌀 3、创建 Android 客户端 ID(失败)

在 凭证 页面上,创建一个 Android 客户端 ID(需要指定应用程序的包名称和 SHA-1 签名)。

SHA1由来。

🌀 4、创建 Web 客户端 ID(推荐)

在 凭证 页面上,创建一个 Web 应用程序客户端 ID。将 JavaScript 来源 和 重定向 URI 字段留空。

使用Android客户端调用登入失败,使用Web客户端调用成功,后面咱有测试。

Google API 控制台项目设置暂时完成,下面咱们添加依赖项。

💥 添加依赖项 🌀 1、在 build.gradle (Project) 中添加 google()

确保你的buildscript和allprojects 部分中都包含 Google 的 Maven 存储库() 。

buildscript { repositories { google() mavenCentral() } ... } allprojects { repositories { google() mavenCentral() jcenter() } } 复制代码 🌀 2、在 build.gradle (Module: app) 并中添加库 implementation 'com.google.android.gms:play-services-auth:19.2.0' 复制代码 🔥 授权登录

💥 建立谷歌链接 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... signInClient(); } private static final int SIGN_LOGIN = 901; private GoogleSignInClient mGoogleSignInClient; private void signInClient() { if (mGoogleSignInClient == null) { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions .DEFAULT_SIGN_IN) .requestEmail() .requestIdToken("376409831673-4bhkuj34dce0l8ktquse1261f3s2g487.apps.googleusercontent.com") .build(); mGoogleSignInClient = GoogleSignIn.getClient(this, gso); } } 复制代码 💥 启动登入和处理返回数据 //启动登入 startActivityForResult(getGoogleIntent(), SIGN_LOGIN); public Intent getGoogleIntent() { Intent signInInten; if (mGoogleSignInClient == null) { signInClient(); } signInInten = mGoogleSignInClient.getSignInIntent(); return signInInten; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case SIGN_LOGIN: MLog.e("setActivityResultGoogle"); Task task = GoogleSignIn.getSignedInAccountFromIntent(data); if (task == null) { MLog.e("task:null"); } try { GoogleSignInAccount account = task.getResult(ApiException.class); MLog.e("Id:" + account.getId() + "|Email:" + account.getEmail() + "|IdToken:" + account.getIdToken()); } catch (ApiException e) { e.printStackTrace(); MLog.e("ApiException:" + e.getMessage()); } break; } } 复制代码 💥 开始测试

🌀 使用Android客户端ID测试(失败)

日志如下:

2021-10-29 13:48:30.706 9918-9918/? E/-SCC-: setActivityResultGoogle 2021-10-29 13:48:30.707 9918-9918/? E/-SCC-: ApiException:10: 复制代码 🌀 使用Web客户端ID测试(成功)

日志如下:

2021-10-29 13:53:25.057 13095-13095/? E/-SCC-: setActivityResultGoogle 2021-10-29 13:53:25.058 13095-13095/? E/-SCC-: Id:10637728323232286|Email:[email protected]|IdToken:eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg1O(这个IdToken比较长) 复制代码 🔥 配置一键登录

💥 建立谷歌链接 private static final int SIGN_LOGIN = 901; private SignInClient oneTapClient; private BeginSignInRequest signInRequest; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... signInClient(); } private void signInClient() { oneTapClient = Identity.getSignInClient(this); signInRequest = BeginSignInRequest.builder() .setPasswordRequestOptions(BeginSignInRequest.PasswordRequestOptions.builder() .setSupported(true) .build()) .setGoogleIdTokenRequestOptions(BeginSignInRequest.GoogleIdTokenRequestOptions.builder() .setSupported(true) // Your server's client ID, not your Android client ID. .setServerClientId("376409831673-4bhkuj34dce0l8ktquse1261f3s2g487.apps.googleusercontent.com") .setFilterByAuthorizedAccounts(true) .build()) // Automatically sign in when exactly one credential is retrieved. .setAutoSelectEnabled(true) .build(); } 复制代码 💥 启动登入和处理返回数据 //启动登入 getGoogleIntent(); public void getGoogleIntent() { oneTapClient.beginSignIn(signInRequest) .addOnSuccessListener(this, new OnSuccessListener() { @Override public void onSuccess(BeginSignInResult result) { try { startIntentSenderForResult( result.getPendingIntent().getIntentSender(), SIGN_LOGIN, null, 0, 0, 0); } catch (IntentSender.SendIntentException e) { MLog.e("Couldn't start One Tap UI: " + e.getLocalizedMessage()); } } }) .addOnFailureListener(this, new OnFailureListener() { @Override public void onFailure( Exception e) { MLog.d("onFailure"+e.getLocalizedMessage()); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case SIGN_LOGIN: MLog.e("setActivityResultGoogle"); try { SignInCredential credential = oneTapClient.getSignInCredentialFromIntent(data); String idToken = credential.getGoogleIdToken(); String username = credential.getId(); String password = credential.getPassword(); if (idToken != null) { MLog.e("username:"+username+"|password:"+password+"|idToken:"+idToken); } else if (password != null) { MLog.e("Got password."); } } catch (ApiException e) { MLog.e("ApiException:"+e.getMessage()); } break; } } 复制代码 💥 开始测试

🌀 使用Android客户端ID测试(失败)

日志如下:

2021-10-29 14:25:23.670 28927-28927/? E/-SCC-: setActivityResultGoogle 2021-10-29 14:25:23.670 28927-28927/? E/-SCC-: ApiException:10: Developer console is not set up correctly 复制代码

这个报错是因为你传的ID不对。

// Your server's client ID, not your Android client ID. .setServerClientId("376409831673-4bhkuj34dce0l8ktquse1261f3s2g487.apps.googleusercontent.com") 复制代码

咱们把这里换成Web客户端ID测试。

🌀 使用Web客户端ID测试(成功)

日志如下:

2021-10-29 14:32:57.495 32021-32021/? E/-SCC-: setActivityResultGoogle 2021-10-29 14:32:57.496 32021-32021/? E/-SCC-: username:[email protected]|password:null|idToken:eyJhbGciOiJSUzI1NiIsImtpZCI6Ijg1ODI4YzU5Mjg0YTY5YjU0YjI3(这个IdToken比较长) 复制代码

SignInCredential.getId()拿到的是账号。

两种方式拿到的数据不同,所以根据需求选择方式。

好了,齐活。

🔥 小结

不管是授权登录还是一键登录都需要使用Web客户端ID才能成功,曾经因为使用 Android 客户端ID测试(失败),咨询过谷歌客服,他们直接推荐用使用Web方式登入,原因也没说,可能是因为设定?

🔥 传送门 💥 官方文档 💥 API 控制台


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有